from tools.request import Driver
from tools.logs import Logs

logger = Logs(__name__).get_logger()


class BasePage(Driver):
    def get_page_source(self, url):
        # 获取浏览器页面
        self.get(url)
        html = self.get_page()
        if "抱歉，你访问的页面不存在！" in html:
            raise Exception("页面数据不存在，检查代码")
        return html

    @staticmethod
    def unit_change(num) -> float:
        if isinstance(num, str):
            if "%" in num:
                return float(num.split("%")[0])
            if "万" in num:
                num = eval(num.replace("万", "")) * 10000
                return float(num)
            if "亿" in num:
                num = eval(num.replace("亿", "")) * 100000000
                return float(num)
        return float(num)


    @staticmethod
    def gp_min_or_max(gp_list: list, gp_key: str, type="min"):
        """
        根据股票列表获取最小的key值
        :param gp_list
        :param gp_key
        :param type
        :return:
        """
        min_n = [BasePage.unit_change(gp_list[0].get(gp_key)), 0]
        max_n = [BasePage.unit_change(gp_list[0].get(gp_key)), 0]
        for i in range(len(gp_list)):
            gp_num = BasePage.unit_change(gp_list[i].get(gp_key))
            if gp_num < min_n[0]:
                min_n[0] = gp_num
                min_n[1] = i
            if gp_num > max_n[0]:
                max_n[0] = gp_num
                max_n[1] = i
        logger.info("max:{},min:{}".format(max_n, min_n))
        if type == "min":
            return min_n
        return max_n

    @staticmethod
    def gp_zj_is_ok(zj_data, zj_type):
        """
        判断股票资金是否ok
        1、获取最近5日内最高的正数资金
        2、从最大的正数资金往后计算直到下一个正数资金为止，如果没有后续的正数，则计算所有
        3、这一个区间内的和值小于最大的正数资金
        :return:
        """
        zj_max = BasePage.gp_min_or_max(zj_data, zj_type, type="max")
        zj_data = zj_data[:zj_max[1]]
        logger.info(f"当前资金列表：{zj_data}")
        logger.info(f"其中最高的数值：{zj_max}")
        num = len(zj_data) - 1
        if num == -1:
            return True
        sum = 0
        while num >= 0:
            zj_num = BasePage.unit_change(zj_data[num].get(zj_type))
            if zj_num < 0:
                sum += zj_num
            if zj_num > 0:
                break
            num -= 1
        if (zj_max[0] + sum) >= 0:
            return True
        return False
